import React, { useState } from 'react';
import axios from 'axios';
import { getAccessToken } from '../services/IFlyService';

/**
 * 语音转文字组件 - 集成科大讯飞语音识别API
 * 允许用户上传音频文件并将其转换为文字
 */
const SpeechToText: React.FC = () => {
  // 状态管理
  const [audioFile, setAudioFile] = useState<File | null>(null); // 存储用户上传的音频文件
  const [transcript, setTranscript] = useState(''); // 存储语音识别结果

  // 处理文件选择事件
  const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {
    if (e.target.files) {
      setAudioFile(e.target.files[0]); // 更新选择的音频文件
    }
  };

  // 执行语音转文字转换
  const handleConvert = async () => {
    if (!audioFile) return; // 确保已选择文件

    try {
      // 获取科大讯飞API访问令牌
      const token = await getAccessToken();
      const sttUrl = 'https://asr.xfyun.cn/v1/private/asr'; // 讯飞语音识别API端点

      // 创建表单数据（根据讯飞API要求）
      const formData = new FormData();
      formData.append('file', audioFile);
      // 注意：需要根据讯飞API文档添加其他必要参数，例如：
      // formData.append('format', '音频格式'); // 如wav
      // formData.append('sample_rate', '采样率'); // 如16000

      // 发送API请求
      const response = await axios.post(
        sttUrl,
        formData,
        {
          headers: {
            Authorization: `Bearer ${token}`, // 认证令牌
            'Content-Type': 'multipart/form-data', // 必须的请求头格式
          },
        }
      );

      // 更新识别结果（注意：response结构需根据实际API响应调整）
      setTranscript(response.data.result); 
    } catch (error) {
      console.error('语音转文字失败:', error);
      // 在实际应用中可添加错误处理（如用户提示）
    }
  };

  return (
    <div className="speech-to-text-container">
      {/* 文件上传控件 */}
      <input 
        type="file" 
        accept="audio/*"  // 限制只接受音频文件
        onChange={handleFileChange}
      />
      
      {/* 转换触发按钮 */}
      <button onClick={handleConvert} disabled={!audioFile}>
        转换为文字
      </button>

      {/* 识别结果展示 */}
      {transcript && (
        <div className="result-section">
          <h3>转换结果:</h3>
          <p>{transcript}</p>
        </div>
      )}
    </div>
  );
};

export default SpeechToText;